https://leetcode.cn/problems/longest-increasing-subsequence/description/

//class Solution
//{
//public:
//    int lengthOfLIS(vector<int>& nums)
//    {
//        int sum = 0;
//        int n = nums.size();
//        vector<int> memo(n);
//        for (int i = 0; i < n; i++)
//        {
//            sum = max(sum, dfs(i, nums, memo));
//        }
//        return sum;
//    }
//    int dfs(int pos, vector<int>& nums, vector<int>& memo)
//    {
//        if (memo[pos] != 0) return memo[pos];
//        int ret = 1;
//        for (int i = pos + 1; i < nums.size(); i++)
//        {
//            if (nums[pos] < nums[i])
//            {
//                ret = max(ret, dfs(i, nums, memo) + 1);
//            }
//        }
//        memo[pos] = ret;
//        return memo[pos];
//    }
//};


https://leetcode.cn/problems/2AoeFn/description/
//class Solution
//{
//    int vis[101][101];
//public:
//    int uniquePaths(int m, int n)
//    {
//        memset(vis, 0, sizeof vis);
//        return dfs(m, n);
//    }
//
//    int dfs(int i, int j)
//    {
//        if (vis[i][j] != 0) return vis[i][j];
//        if (i == 0 || j == 0) return 0;
//        if (i == 1 && j == 1)
//        {
//            vis[i][j] = 1;
//            return 1;
//        }
//        vis[i][j] = dfs(i - 1, j) + dfs(i, j - 1);
//        return vis[i][j];
//    }
//};